/**
 * 
 * @author Jovi-林兆维
 * @date 2015年9月21日
 * @version 1.0
 * 
 */
// msg：提示的内容(非必需)
// show：提示在所依附的容器(非必需，支持id,class,标签选择器)
// must：为必须验证 ，参数如下(为空默认为base)
// 表单验证
// base：基本的是否为空
// phone：是否为手机号码 11位
// tel：是否为电话号码 12位
// email：是否为邮箱号码
// name：验证是否为正确名称 中文英文
// no_sp_ch：非特殊字符
// ch_en_num_un：中文英文数字下划线
// ch_en_num_un_sp：中文英文数字下划线空格
// only_num：数字
// only_ch：中文
// only_en：英文
// file：
// picture
// price：价格
// date：日期
var JQUtils = {
	form : {
		init : function(p) {
			if (p.isUsedTips !== undefined && p.isUsedTips !== null
					&& p.isUsedTips !== "") {
				JQUtils.form.isUsedTips = p.isUsedTips;
			}
			if (p.tips.direction !== undefined && p.tips.direction !== null
					&& p.tips.direction !== "") {
				JQUtils.form.tips.direction = p.tips.direction;
			}
			if (p.tips.color !== undefined && p.tips.color !== null
					&& p.tips.color !== "") {
				JQUtils.form.tips.color = p.tips.color;
			}
			if (p.tips.tipsMore !== undefined && p.tips.tipsMore !== null
					&& p.tips.tipsMore !== "") {
				JQUtils.form.tips.tipsMore = p.tips.tipsMore;
			}
			if (p.tips.time !== undefined && p.tips.time !== null
					&& p.tips.time !== "") {
				JQUtils.form.tips.time = p.tips.time;
			}
		},
		isUsedTips : true,
		tips : {
			direction : 2,
			color : '#FF3366',
			tipsMore : false,
			time : 2000
		},
		isOk : true,
		errorId : "",
		tempmsg : "",
		verifyForm : function($myForm) {
			// 每次恢复默认
			JQUtils.form.isOk = true;
			// 所有需要验证的表单
			var forms = $myForm.find("[must]");
			// 错误的对象
			var errorForms = new Array();
			$.each(forms, function(i) {
				var isOk = true;
				// 调用验证
				isOk = JQUtils.form.verify(forms[i]);
				// 如果开启多提示模式
				if (JQUtils.form.isUsedTips && JQUtils.form.tips.tipsMore) {
					if (!isOk) {
						errorForms.push(forms[i]);
					}
				} else {
					JQUtils.form.isOk = isOk;
					return isOk;
				}
			});
			// 如果开启多提示模式
			if (JQUtils.form.isUsedTips && JQUtils.form.tips.tipsMore) {
				if (errorForms.length > 0) {
					JQUtils.form.isOk = false;
					$.each(errorForms, function(i) {
						var id = "#" + $(errorForms[i]).attr("id");
						var show = $(errorForms[i]).attr("show");
						JQUtils.form.prompt(id, show);
					});
				}
			} else if (JQUtils.form.isUsedTips) {
				var id = "#" + JQUtils.form.errorId;
				var show = $("#" + JQUtils.form.errorId).attr("show");
				JQUtils.form.prompt(id, show);
				// 提示后将错误的id设为空
				JQUtils.form.errorId = "";
			} else {
				if (JQUtils.form.errorId !== "") {
					var name = $("#" + JQUtils.form.errorId).attr("name");
					var label = $("label[for=" + name + "]").text();
					alert(label.trim() + JQUtils.form.tempmsg);
					// 提示后将错误的id设为空
					JQUtils.form.errorId = "";
				}
			}
			return JQUtils.form.isOk;
		},
		verify : function(form) {
			var isOk = true;
			var attr = $(form).attr("must");
			var msg = $(form).attr("msg");
			if (msg === undefined || msg === "" || msg === null) {
				// 默认提示不允许为空
				msg = "不允许为空";
			}
			var val = $(form).val();
			var tag = $(form).prop("tagName");
			// 如果是必选项则验证
			if (attr !== undefined) {
				if (tag === "SELECT") {
					if (val === "" || val === undefined || val === null) {
						isOk = false;
						msg = "请选择正确内容";
					}
					JQUtils.form.support.setMsg(msg, form);
				} else {
					if (attr === "" || attr.indexOf("base") > -1) {
						// 调用基本验证是否为空
						isOk = JQUtils.form.support.base(msg, attr, val, form);
					} else if (attr.indexOf("phone") > -1) {
						// 调用手机号码验证
						isOk = JQUtils.form.support.phone(msg, attr, val, form);
					} else if (attr.indexOf("tel") > -1) {
						// 调用电话号码验证
						isOk = JQUtils.form.support.tel(msg, attr, val, form);
					} else if (attr.indexOf("email") > -1) {
						// 调用邮箱号码验证
						isOk = JQUtils.form.support.email(msg, attr, val, form);
					} else if (attr.indexOf("name") > -1) {
						// 调用名称验证
						isOk = JQUtils.form.support.name(msg, attr, val, form);
					} else if (attr.indexOf("no_sp_ch") > -1) {
						// 调用过滤特殊字符
						isOk = JQUtils.form.support.no_sp_ch(msg, attr, val,
								form);
					} else if (attr.indexOf("ch_en_num_un") > -1) {
						// 调用验证中文英文数字下划线
						isOk = JQUtils.form.support.ch_en_num_un(msg, attr,
								val, form);
					} else if (attr.indexOf("idcard") > -1) {
						// 调用身份证号码验证
						isOk = JQUtils.form.support
								.idcard(msg, attr, val, form);
					} else if (attr.indexOf("only_num") > -1) {
						// 调用验证数字
						isOk = JQUtils.form.support.only_num(msg, attr, val,
								form);
					} else if (attr.indexOf("only_ch") > -1) {
						// 调用验证中文
						isOk = JQUtils.form.support.only_ch(msg, attr, val,
								form);
					} else if (attr.indexOf("only_en") > -1) {
						// 调用验证英文
						isOk = JQUtils.form.support.only_en(msg, attr, val,
								form);
					} else if (attr.indexOf("picture") > -1) {
						// 调用验证图片格式
						isOk = JQUtils.form.support.picture(msg, attr, val,
								form);
					} else if (attr.indexOf("price") > -1) {
						// 调用验证价格
						isOk = JQUtils.form.support.price(msg, attr, val, form);
					} else if (attr.indexOf("date") > -1) {
						// 调用验证日期
						isOk = JQUtils.form.support.date(msg, attr, val, form);
					}
				}
			}
			// 假如不正确则保存错误的id
			if (!isOk) {
				JQUtils.form.errorId = $(form).attr("id");
			}
			return isOk;
		},
		prompt : function(select, alternative) {
			var element = select;
			if (alternative !== undefined) {
				element = alternative;
			}
			var msg = JQUtils.form.tempmsg;
			if (JQUtils.form.tips.tipsMore) {
				msg = $(select).attr("tmsg");
			}
			layer.tips(msg, element,
					{
						tips : [ JQUtils.form.tips.direction,
								JQUtils.form.tips.color ],
						time : JQUtils.form.tips.time,
						tipsMore : JQUtils.form.tips.tipsMore
					});
		},
		support : {
			base : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			phone : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/1[0-9]{10}/.test(val)) {
					isOk = false;
					msg = "手机号码格式不正确";
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			tel : function(msg, attr, val, form) {
				var isOk = true;
				/*if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/d{3}-\d{8}|\d{4}-\d{7}/.test(val)) {
					isOk = false;
					msg = "电话号码格式不正确";
				}
				JQUtils.form.support.setMsg(msg, form);*/
				return isOk;
			},
			email : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
						.test(val)) {
					isOk = false;
					msg = "电子邮箱格式不正确";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			name : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^[\u4e00-\u9fa5a-zA-Z]+$/.test(val)) {
					isOk = false;
					// 中文英文//[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*
					msg = "只允许输入中文或英文";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			no_sp_ch : function(msg, attr, val, form) {
				var isOk = true;
				var b = attr.indexOf("[");
				var e = attr.lastIndexOf("]");
				var filter = "";
				var defaultFilter = "";
				// 提取需要过滤的字符
				if (b > -1 && e > -1) {
					filter = attr.substring(b, e + 1);
				}
				// 设置默认过滤字符
				if (filter === "") {
					defaultFilter = "[`@#$^&*'\\<>/￥……（）(){}—【】]";
				} else {
					defaultFilter = filter;
				}
				var pattern = new RegExp(defaultFilter);
				if (val === "" || val === null || val === undefined) {
					isOk = false;
				} else if (pattern.test(val)) {
					isOk = false;
					msg = "不允许出现特殊字符";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			ch_en_num_un : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^[\u4e00-\u9fa5_a-zA-Z0-9]+$/.test(val)) {
					isOk = false;
					msg = "必须是中文、英文、数字、下划线";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			idcard : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
						.test(val)) {
					isOk = false;
					msg = "请输入正确身份证号";
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			only_num : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^[0-9]+$/.test(val)) {
					isOk = false;
					msg = "只允许输入数字";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			only_ch : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^[\u4e00-\u9fa5]+$/i.test(val)) {
					isOk = false;
					msg = "只允许输入中文";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			only_en : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^[A-Za-z]+$/.test(val)) {
					isOk = false;
					msg = "只允许输入英文";
				} else {
					isOk = JQUtils.form.support.verifyLength(attr, val, form);
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			picture : function(msg, attr, val, form) {
				var isOk = true;
				var b = attr.indexOf("(");
				var e = attr.lastIndexOf(")");
				var formats = "";
				// 提取支持的图片格式
				if (b > -1 && e > -1) {
					formats = attr.substring(b, e + 1);
				}
				// 默认支持的图片格式
				var defaultFormat = "(jpeg|jpg|gif|png|bmp)";
				if (formats != "") {
					defaultFormat = formats;
				}
				var pictrueFormat = "^[a-zA-Z]:(\\\\.+)." + defaultFormat + "$";
				var regExp = new RegExp(pictrueFormat);
				if (val === "" || val === undefined || val === null) {
					isOk = false;
					msg = "必须选择一张图片";
				} else if (!regExp.test(val)) {
					isOk = false;
					msg = "图片格式不正确";
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			price : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^(([1-9]\d*)|\d)(\.\d{1,2})?$/.test(val)) {
					isOk = false;
					msg = "价格不正确";
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			date : function(msg, attr, val, form) {
				var isOk = true;
				if (val === "" || val === undefined || val === null) {
					isOk = false;
				} else if (!/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/.test(val)) {
					isOk = false;
					msg = "日期不正确";
				}
				JQUtils.form.support.setMsg(msg, form);
				return isOk;
			},
			verifyLength : function(attr, val, form) {
				var group = attr.split(":");
				var isOk = true;
				if (group.length == 2) {
					// 如果参数的为2位
					if (val.length !== Number(group[1])) {
						isOk = false;
					}
				} else if (group.length == 3) {
					// 如果参数的为3位
					if (val.length < Number(group[1])
							|| val.length > Number(group[2])) {
						isOk = false;
					}
				}
				if (!isOk) {
					JQUtils.form.support.setMsg("长度不正确", form);
				}
				return isOk;
			},
			setMsg : function(msg, form) {
				JQUtils.form.tempmsg = msg;
				if (form !== undefined && form !== "" && form !== null) {
					$(form).attr("tmsg", msg);
				}
			}

		}
	},
	// 数组
	array : {
		// 去除重复
		unique : function(array) {
			var result = [], hash = {};
			for (var i = 0, elem; (elem = array[i]) != null; i++) {
				if (!hash[elem]) {
					result.push(elem);
					hash[elem] = true;
				}
			}
			return result;
		}
	},
	// 工具集合
	utils : {
		// 键值对
		map : function() {
			this.keys = new Array();
			this.data = new Array();
			// 添加键值对
			this.set = function(key, value) {
				// 如键不存在则身【键】数组添加键名
				if (this.data[key] == null) {
					this.keys.push(value);
				}
				this.data[key] = value;// 给键赋值
			};
			// 获取键对应的值
			this.get = function(key) {
				return this.data[key];
			};
			// 去除键值，(去除键数据中的键名及对应的值)
			this.remove = function(key) {
				this.keys.remove(key);
				this.data[key] = null;
			};
			// 判断键值元素是否为空
			this.isEmpty = function() {
				return this.keys.length == 0;
			};
			// 获取键值元素大小
			this.size = function() {
				return this.keys.length;
			};
		}
	},
	url : {
		getUrlParam : function(key) {
			var url = window.location.search;
			var newurl = url.substring(1, url.length);
			var paramArray = [];
			var map = new JQUtils.utils.map();
			if (newurl.indexOf("&") >= 0) {
				paramArray = newurl.split("&");
			} else {
				paramArray[0] = newurl;
			}
			for (var i = 0; i < paramArray.length; i++) {
				var temp = [];
				var values = [];
				if (paramArray[i].indexOf("=") >= 0) {
					temp = paramArray[i].split("=");
				}
				for (var j = 0; j < paramArray.length; j++) {
					var temp2 = []
					if (paramArray[j].indexOf("=") >= 0) {
						temp2 = paramArray[j].split("=");
					}
					if (temp2[0] === temp[0]) {
						values.push(temp2[1]);
					}
				}
				map.set(temp[0], values.length <= 1 ? temp[1] : values);
			}
			if (key == null || key == "" || key == undefined) {
				return map;
			} else {
				return map.get(key);
			}
		}
	}
};

Date.prototype.Format = function(fmt) { // author: meizz
	var o = {
		"M+" : this.getMonth() + 1, // 月份
		"d+" : this.getDate(), // 日
		"h+" : this.getHours(), // 小时
		"m+" : this.getMinutes(), // 分
		"s+" : this.getSeconds(), // 秒
		"q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
		"S" : this.getMilliseconds()
	// 毫秒
	};
	if (/(y+)/.test(fmt))
		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "")
				.substr(4 - RegExp.$1.length));
	for ( var k in o)
		if (new RegExp("(" + k + ")").test(fmt))
			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k])
					: (("00" + o[k]).substr(("" + o[k]).length)));
	return fmt;
}

Array.prototype.remove = function(b) {
	var a = this.indexOf(b);
	if (a >= 0) {
		this.splice(a, 1);
		return true;
	}
	return false;
};